﻿/*
    PerstSyncProvider
    Copyright (C) 2011 Mikolas Bingemer, MediFox GmbH

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
    MA 02110-1301  USA.
 */

using Perst;

namespace MediFox.Synchronization.ClientServices.PerstSyncProvider
{
    public class StorageListener : Perst.StorageListener
    {
        private Database _database;

        internal StorageListener(Database database)
        {
            _database = database;
        }

        private void AssignDatabase(object obj)
        {
            if (obj is PerstOfflineEntity)
            {
                ((PerstOfflineEntity)obj).Database = _database;
            }
        }

        public override void OnObjectAssignOid(object obj)
        {
            //Logger.Log(System.Reflection.MethodBase.GetCurrentMethod(), string.Format("{0} {1}", obj.GetType().Name, ((IPersistent)obj).Oid));
            AssignDatabase(obj);
        }

        public override void OnObjectLoad(object obj)
        {
            //Logger.Log(System.Reflection.MethodBase.GetCurrentMethod(), string.Format("{0} {1}", obj.GetType().Name, ((IPersistent)obj).Oid));
            AssignDatabase(obj);
        }

        public override void QueryExecution(object query, long elapsedTime, bool sequentialSearch)
        {
            if (sequentialSearch)
            {
                Logger.Log(System.Reflection.MethodBase.GetCurrentMethod(), string.Format("{0} {1} {2}", elapsedTime, sequentialSearch, query));
                //System.Diagnostics.Debug.Assert(!sequentialSearch);
            }
        }
    }
}
